package day_04;

import java.util.HashMap;
import java.util.Map;

public class leetcode_13 {
    /**
     * 罗马数字包含以下七种字符: I， V， X， L，C，D 和 M。
     */
    public int romanToInt(String s) {
        int last = 1000;
        int ans = 0;
        for(int i = 0; i < s.length(); i++){
            ans = ans + getValue(s.charAt(i));//一个一个加上

            if (getValue(s.charAt(i)) > last) {//如果一比较加的应该是减去的
                ans = ans - 2 * last;//减去两倍的原来加上的数
            }
            last = getValue(s.charAt(i));
        }
        return ans;
    }

    public int getValue (char c) {
        switch(c){
            case 'I' : return 1;
            case 'V' : return 5;
            case 'X' : return 10;
            case 'L' : return 50;
            case 'C' : return 100;
            case 'D' : return 500;
            case 'M' : return 1000;
            default : return 0;
        }
    }






        /*
        Map<Character,Integer> map=new HashMap<Character, Integer>();
        map.put('I',1);
        map.put('V',5);
        map.put('X',10);
        map.put('L',50);
        map.put('C',100);
        map.put('D',500);
        map.put('M',1000);
        char[] ss=s.toCharArray();
        int num=0;//用来记录数的和
        int i=0;
        for(i=0;i<ss.length-1;i++){//因为要和后一个比较防止溢出。第一种结束会溢出，第二种正好结束
            if(map.get(ss[i])>=map.get(ss[i+1]))//两两相加
            {
                num+=map.get(ss[i]);
            }//结束是i==ss.length
            if(map.get(ss[i])<map.get(ss[i+1])){//
                num=num+map.get(ss[i+1])-map.get(ss[i]);
                i++;
            }//结束时i==ss.length
        }
        if(i==ss.length-1)//
            num+=map.get(ss[i]);
        return num;

         */
    }
